import { NodeSize } from '../config'

export default function jmsConsumer(flow) {
  flow.register('JmsConsumer', ({ PolygonNode, PolygonNodeModel, h }) => {
    class Node extends PolygonNode {
      getIconShape() {
        return h(
          'svg',
          {
            width: NodeSize,
            height: NodeSize,
            viewBox: '0 0 1024 1024'
          },
          h(
            'path',
            {
              fill: '#3D6480',
              d: 'M913.066667 806.4v72.533333l-128-123.733333-34.133334 29.866667 128 128h-76.8v46.933333h157.866667v-153.6z'
            }
          ),
          h(
            'path',
            {
              fill: '#EFF9FE',
              d: 'M704 473.6V268.8H328.533333v196.266667l192 192z'
            }
          ),
          h(
            'path',
            {
              fill: '#FFFFFF',
              d: 'M243.2 413.866667v362.666666H597.333333l196.266667-200.533333V418.133333l-273.066667 268.8z'
            }
          ),
          h(
            'path',
            {
              fill: '#3D6480',
              d: 'M243.2 413.866667l277.333333 277.333333 273.066667-268.8 4.266667-4.266667v166.4l42.666666-42.666666V362.666667h-89.6V226.133333H285.866667v136.533334h-85.333334V814.933333H554.666667l42.666666-42.666666H243.2V413.866667z m85.333333-145.066667h379.733334v204.8l-183.466667 183.466667-192-192V268.8z'
            }
          )
        )
      }

      getLabelShape() {
        return h(
          'text',
          {
            fill: '#000000',
            fontSize: 12,
            x: NodeSize / 2,
            y: NodeSize + 20,
            textAnchor: 'middle',
            dominantBaseline: 'middle'
          },
          'JMS消费者'
        )
      }

      getShape() {
        const { x, y, width, height } = this.getAttributes()
        const transform = `matrix(1 0 0 1 ${x - width / 2} ${y - height / 2})`
        return h(
          'g',
          {
            transform
          },
          [
            h(
              'rect',
              {
                rx: 5,
                ry: 5,
                width: NodeSize,
                height: NodeSize,
                fill: '#fff',
                stroke: '#3D6380',
                strokeWidth: 1
              }
            ),
            this.getIconShape(),
            this.getLabelShape()
          ]
        )
      }
    }
    class Model extends PolygonNodeModel {
      constructor(data, graphModel) {
        super(data, graphModel)
        this.points = [
          [NodeSize / 2, 0],
          [NodeSize, NodeSize / 2],
          [NodeSize / 2, NodeSize],
          [0, NodeSize / 2]
        ]
      }
    }

    return {
      view: Node,
      model: Model
    }
  })
}
